﻿using System;
using System.Collections.Generic;
using ControleRepresentante.Logic.Models;
using ControleRepresentante.Migration.Models;
using ControleRepresentante.Migration.Repositories;

namespace ControleRepresentante.Migration.Steps
{
    internal class VendedorMigrateStep : MigrationStepBase
    {
        public override void Migrate(Guid representanteId, MigrationStatus migrationStatus, ControleRepresentanteRepository controleRepresentanteRepository, ZTRepository ztRepository, Guid userId)
        {
            migrationStatus.CurrentStep = "Migrate Vendedores";

            int total = ztRepository.GetTotalVendedores();

            Guid cnpjAttributeId = CreateAttribute(representanteId, "CNPJ", AttributeType.Vendedor, controleRepresentanteRepository);
            Guid inscricaoEstadualAttributeId = CreateAttribute(representanteId, "Inscrição Estadual", AttributeType.Vendedor, controleRepresentanteRepository);
            Guid observacaoAttributeId = CreateAttribute(representanteId, "Observação", AttributeType.Vendedor, controleRepresentanteRepository);
            Guid siglaAttributeId = CreateAttribute(representanteId, "Sigla", AttributeType.Vendedor, controleRepresentanteRepository);

            IEnumerable<ZTVendedor> ztVendedores = ztRepository.GetVendedores();

            int index = 0;
            foreach (ZTVendedor ztVendedor in ztVendedores)
            {
                Guid vendedorId = GetVendedorId(ztVendedor.Id);
                controleRepresentanteRepository.CreateVendedor(representanteId, vendedorId, ztVendedor.CNPJ, ztVendedor.Nome);
                controleRepresentanteRepository.CreateAttributeValue(vendedorId, siglaAttributeId, ztVendedor.Sigla);
                controleRepresentanteRepository.CreateAttributeValue(vendedorId, cnpjAttributeId, ztVendedor.CNPJ);
                controleRepresentanteRepository.CreateAttributeValue(vendedorId, inscricaoEstadualAttributeId, ztVendedor.InscricaoEstadual);
                controleRepresentanteRepository.CreateAttributeValue(vendedorId, observacaoAttributeId, ztVendedor.Observacao);
                controleRepresentanteRepository.CreateConta(vendedorId, true, ztVendedor.Banco, ztVendedor.Agencia, ztVendedor.Conta);
                controleRepresentanteRepository.CreateEndereco(vendedorId, EnderecoType.Comercial, true, ztVendedor.Endereco, ztVendedor.Bairro, ztVendedor.CEP, ztVendedor.Cidade, ztVendedor.Estado);
                controleRepresentanteRepository.CreateContato(vendedorId, ContatoType.TelefoneComercial, true, ztVendedor.Telefone);
                controleRepresentanteRepository.CreateContato(vendedorId, ContatoType.Celular, true, ztVendedor.Celular);
                controleRepresentanteRepository.CreateContato(vendedorId, ContatoType.FaxComercial, true, ztVendedor.Fax);
                controleRepresentanteRepository.CreateContato(vendedorId, ContatoType.Email, true, ztVendedor.Email);
                migrationStatus.SetCurrentProgress(++index, total);
            }
        }
    }
}